package cn.iocoder.yudao.module.api.shop.admin;

import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.module.api.shop.admin.dto.ShopAdminRespDTO;
import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;

import java.util.List;
import java.util.Set;

/**
 * 店铺相关的管理员的 API 接口
 *
 * @author 山野羡民（1032694760@qq.com）
 */
public interface ShopUserApi {

    /**
     * 根据用户编号获取店铺编号数组
     *
     * @param userId   用户编号
     * @param userType 用户类型 {@link UserTypeEnum}
     * @return 店铺编号的数组
     */
    @Nonnull
    Set<Long> getShopIdsByUserId(Long userId, Integer userType);

    /**
     * 根据用户编号获取店铺编号
     *
     * @param userId   用户编号
     * @param userType 用户类型 {@link UserTypeEnum}
     * @return 店铺编号
     */
    default Long getShopIdByUserId(Long userId, Integer userType) {
        Set<Long> shopIds = getShopIdsByUserId(userId, userType);
        return CollUtil.isEmpty(shopIds) ? null : shopIds.stream().sorted().toList().get(shopIds.size() - 1);
    }

    /**
     * 根据店铺编号，获得店铺商户列表
     * @param shopId 店铺编号
     * @return 店铺商户列表
     */
    @Nonnull
    List<ShopAdminRespDTO> getShopAdminListByShopId(Long shopId);

    /**
     * 店铺商户信息
     *
     * @param shopId 店铺编号
     * @param userId   用户编号
     * @param userType 用户类型 {@link UserTypeEnum}
     * @return 店铺商户信息
     */
    @Nullable
    ShopAdminRespDTO getAdmin(Long shopId, Long userId, Integer userType);

    /**
     * 判断是否是店铺商户
     *
     * @param userId   用户编号
     * @param userType 用户类型 {@link UserTypeEnum}
     */
    default boolean isShopAdmin(Long userId, Integer userType) {
        Set<Long> shopIds = getShopIdsByUserId(userId, userType);
        return !CollUtil.isEmpty(shopIds);
    }

}
